package com.scheduling.order.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.scheduling.order.entity.OrderItem;
import com.scheduling.order.entity.dto.OrderItemDTO;

import java.util.List;

/**
 * 订单项服务接口
 *
 * @author 开发团队
 * @since 2025-05-29
 */
public interface IOrderItemService extends IService<OrderItem> {

    /**
     * 批量创建订单项
     *
     * @param orderId    订单ID
     * @param orderItems 订单项列表
     * @return 创建的订单项详情列表
     */
    List<OrderItemDTO> createOrderItems(String orderId, List<OrderItemDTO> orderItems);

    /**
     * 更新订单项
     *
     * @param orderItemDTO 订单项数据传输对象
     * @return 更新后的订单项详情
     */
    OrderItemDTO updateOrderItem(OrderItemDTO orderItemDTO);

    /**
     * 根据订单项ID删除订单项
     *
     * @param orderItemId 订单项ID
     * @return 是否删除成功
     */
    boolean deleteOrderItem(String orderItemId);

    /**
     * 根据订单ID删除所有订单项
     *
     * @param orderId 订单ID
     * @return 删除的数量
     */
    int deleteOrderItemsByOrderId(String orderId);

    /**
     * 根据订单项ID查询订单项详情（包含产品信息）
     *
     * @param orderItemId 订单项ID
     * @return 订单项详情
     */
    OrderItemDTO getOrderItemDetail(String orderItemId);

    /**
     * 根据订单ID查询订单项列表（包含产品信息）
     *
     * @param orderId 订单ID
     * @return 订单项列表
     */
    List<OrderItemDTO> getOrderItemsByOrderId(String orderId);

    /**
     * 查询指定状态的订单项列表
     *
     * @param status 订单项状态
     * @return 订单项列表
     */
    List<OrderItemDTO> getOrderItemsByStatus(String status);

    /**
     * 根据产品ID查询相关订单项
     *
     * @param productId 产品ID
     * @return 订单项列表
     */
    List<OrderItemDTO> getOrderItemsByProductId(String productId);

    /**
     * 更新订单项生产数量
     *
     * @param orderItemId      订单项ID
     * @param producedQuantity 已生产数量
     * @return 是否更新成功
     */
    boolean updateProducedQuantity(String orderItemId, Integer producedQuantity);

    /**
     * 更新订单项状态
     *
     * @param orderItemId 订单项ID
     * @param status      新状态
     * @return 是否更新成功
     */
    boolean updateOrderItemStatus(String orderItemId, String status);

    /**
     * 批量更新订单项状态
     *
     * @param orderItemIds 订单项ID列表
     * @param status       新状态
     * @return 更新成功的数量
     */
    int batchUpdateOrderItemStatus(List<String> orderItemIds, String status);

    /**
     * 增加订单项的已生产数量
     *
     * @param orderItemId       订单项ID
     * @param incrementQuantity 增加的数量
     * @return 是否更新成功
     */
    boolean incrementProducedQuantity(String orderItemId, Integer incrementQuantity);

    /**
     * 检查订单项是否完成
     *
     * @param orderItemId 订单项ID
     * @return 是否完成
     */
    boolean isOrderItemCompleted(String orderItemId);

    /**
     * 获取待生产的订单项列表（用于排产）
     *
     * @return 待生产订单项列表
     */
    List<OrderItemDTO> getPendingOrderItems();

    /**
     * 获取高优先级的订单项列表
     *
     * @return 高优先级订单项列表
     */
    List<OrderItemDTO> getHighPriorityOrderItems();
} 